package com.priox.sigar.client.dto;

import com.priox.sigar.enums.ActivoInactivo;
import com.priox.sigar.enums.TipoCuenta;
import com.priox.sigar.enums.TipoSigno;
import com.priox.sigar.util.NumberUtil;
import org.apache.commons.lang.StringUtils;


import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * User: Matrix
 * Date: 19/01/13
 */
public class AgrupacionDTO extends AuditoriaDTO {

    private Long agrupacionId;
    private Long usuarioId;

    private String nombre;
    private String responsable;
    private BigDecimal tp1 = BigDecimal.ZERO;
    private BigDecimal tp2 = BigDecimal.ZERO;
    private BigDecimal tp3 = BigDecimal.ZERO;
    private BigDecimal tp4 = BigDecimal.ZERO;
    private BigDecimal tp5 = BigDecimal.ZERO;
    private BigDecimal tp6 = BigDecimal.ZERO;
    private BigDecimal tp7 = BigDecimal.ZERO;
    private BigDecimal tp8 = BigDecimal.ZERO;

    private TipoSigno signoNatural;
    private boolean mostrarSigno;
    private boolean mostrarAlmacen;

    private TipoCuenta tipo;

    private Boolean seleccionado;

    private ActivoInactivo estado;

    private List<TasaProvisionDTO> tasaProvisionList;


    private List<CuentaContableDTO> cuentaContables = new ArrayList<CuentaContableDTO>();


    public boolean isValid() {
        return tp1 != null || tp2 != null || tp3 != null || tp4 != null || tp5 != null || tp6 != null || tp7 != null || tp8 != null;
    }


    public void buildTasaProvision() {
        tasaProvisionList = new ArrayList<TasaProvisionDTO>();
        if (isValid()) {
            TasaProvisionDTO tp = new TasaProvisionDTO();
            tp.setRango1(tp1);
            tp.setRango2(tp2);
            tp.setRango3(tp3);
            tp.setRango4(tp4);
            tp.setRango5(tp5);
            tp.setRango6(tp6);
            tp.setRango7(tp7);
            tp.setRango8(tp8);
            tasaProvisionList.add(tp);
        } else {

            tasaProvisionList.add(new TasaProvisionDTO());
        }
    }


    public Long getAgrupacionId() {
        return agrupacionId;
    }

    public void setAgrupacionId(Long agrupacionId) {
        this.agrupacionId = agrupacionId;
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public Boolean getSeleccionado() {
        return seleccionado;
    }

    public void setSeleccionado(Boolean seleccionado) {
        this.seleccionado = seleccionado;
    }



    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        AgrupacionDTO that = (AgrupacionDTO) o;

        if (agrupacionId != null ? !agrupacionId.equals(that.agrupacionId) : that.agrupacionId != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        return agrupacionId != null ? agrupacionId.hashCode() : 0;
    }

    public TipoSigno getSignoNatural() {
        return signoNatural;
    }

    public void setSignoNatural(TipoSigno signoNatural) {
        this.signoNatural = signoNatural;
    }

    public TipoCuenta getTipo() {
        return tipo;
    }

    public void setTipo(TipoCuenta tipo) {
        this.tipo = tipo;
    }

    public ActivoInactivo getEstado() {
        return estado;
    }

    public void setEstado(ActivoInactivo estado) {
        this.estado = estado;
    }

    public Long getUsuarioId() {
        return usuarioId;
    }

    public void setUsuarioId(Long usuarioId) {
        this.usuarioId = usuarioId;
    }

    public List<TasaProvisionDTO> getTasaProvisionList() {
        return tasaProvisionList;
    }

    public void setTasaProvisionList(List<TasaProvisionDTO> tasaProvisionList) {
        this.tasaProvisionList = tasaProvisionList;
    }

    /*public String getTasaProvision() {
        return tasaProvision;
    }

    public void setTasaProvision(String tasaProvision) {
        this.tasaProvision = tasaProvision;
    }*/

    public void asignarTasaProvision() {
        for (TasaProvisionDTO tasaProvisionDTO : tasaProvisionList) {
            tp1 = tasaProvisionDTO.getRango1();
            tp2 = tasaProvisionDTO.getRango2();
            tp3 = tasaProvisionDTO.getRango3();
            tp4 = tasaProvisionDTO.getRango4();
            tp5 = tasaProvisionDTO.getRango5();
            tp6 = tasaProvisionDTO.getRango6();
            tp7 = tasaProvisionDTO.getRango7();
            tp8 = tasaProvisionDTO.getRango8();
        }
    }

    public BigDecimal getTp1() {
        return tp1;
    }

    public void setTp1(BigDecimal tp1) {
        this.tp1 = tp1;
    }

    public BigDecimal getTp2() {
        return tp2;
    }

    public void setTp2(BigDecimal tp2) {
        this.tp2 = tp2;
    }

    public BigDecimal getTp3() {
        return tp3;
    }

    public void setTp3(BigDecimal tp3) {
        this.tp3 = tp3;
    }

    public BigDecimal getTp4() {
        return tp4;
    }

    public void setTp4(BigDecimal tp4) {
        this.tp4 = tp4;
    }

    public BigDecimal getTp5() {
        return tp5;
    }

    public void setTp5(BigDecimal tp5) {
        this.tp5 = tp5;
    }

    public BigDecimal getTp6() {
        return tp6;
    }

    public void setTp6(BigDecimal tp6) {
        this.tp6 = tp6;
    }

    public BigDecimal getTp7() {
        return tp7;
    }

    public void setTp7(BigDecimal tp7) {
        this.tp7 = tp7;
    }

    public BigDecimal getTp8() {
        return tp8;
    }

    public void setTp8(BigDecimal tp8) {
        this.tp8 = tp8;
    }

    public boolean isMostrarSigno() {
        return !TipoCuenta.CUENTA_ALMACEN.equals(tipo);
    }

    public void setMostrarSigno(boolean mostrarSigno) {
        this.mostrarSigno = mostrarSigno;
    }

    public boolean isMostrarAlmacen() {
        return TipoCuenta.CUENTA_ALMACEN.equals(tipo);
    }

    public void setMostrarAlmacen(boolean mostrarAlmacen) {
        this.mostrarAlmacen = mostrarAlmacen;
    }

    public String getResponsable() {
        return responsable;
    }

    public void setResponsable(String responsable) {
        this.responsable = responsable;
    }

    public List<CuentaContableDTO> getCuentaContables() {
        return cuentaContables;
    }

    public void setCuentaContables(List<CuentaContableDTO> cuentaContables) {
        this.cuentaContables = cuentaContables;
    }


}
